package com.zenithmind.disk.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 文件状态枚举
 * 遵循开闭原则：新增状态时只需添加枚举值，不需要修改现有代码
 */
@Getter
@AllArgsConstructor
public enum FileStatus {
    
    /**
     * 已删除
     */
    DELETED(0, "已删除"),
    
    /**
     * 正常
     */
    NORMAL(1, "正常"),
    
    /**
     * 已归档
     */
    ARCHIVED(2, "已归档"),
    
    /**
     * 锁定
     */
    LOCKED(3, "锁定");
    
    private final Integer code;
    private final String description;
    
    /**
     * 根据代码获取枚举
     * @param code 状态代码
     * @return 对应的枚举值
     */
    public static FileStatus fromCode(Integer code) {
        if (code == null) {
            return null;
        }
        
        for (FileStatus status : values()) {
            if (status.code.equals(code)) {
                return status;
            }
        }
        
        throw new IllegalArgumentException("未知的文件状态代码: " + code);
    }
    
    /**
     * 检查是否为正常状态
     * @return true如果是正常状态
     */
    public boolean isNormal() {
        return this == NORMAL;
    }
    
    /**
     * 检查是否为已删除状态
     * @return true如果是已删除状态
     */
    public boolean isDeleted() {
        return this == DELETED;
    }
}
